package io;

import java.util.Scanner;
import java.io.*;
import java.nio.charset.StandardCharsets;

/**
 * 缓冲字符流----------最常用的读写字符串的流
 * 是一对高级流，并且是字符流
 * 内部维护一个默认8KB（8192）长度的char数组，还是以块读写的形式来读写字符以提高效率
 * BufferedWriter和BufferedReader
 *
 * PrintWriter:按行写入数据
 *
 * */
public class PWDemo {
    public static void main(String[] args) throws IOException {
        //文件流（字节流，低级流）：将字节写入到文件中
        FileOutputStream fos = new FileOutputStream("pw.txt");
        //转换流（字符流，高级流）：1.负责链接字符流和字节流  2. 将写出的字符转换为字节再写出
        OutputStreamWriter osw = new OutputStreamWriter(fos,StandardCharsets.UTF_8);
        //缓冲字符流（字符流，高级流）： 块文本数据加速（内部缓冲区默认8192个char）
        BufferedWriter bw = new BufferedWriter(osw);
        //PrintWriter（字符流，高级流）：1.按行写出字符串  2.？？？
        //构造器第一个参数为流，第二个参数可以传入boolean类型的数据来表示是否打开自动刷新功能（flush）
        //PrintWriter pw = new PrintWriter("pw.txt",true);//不存在字符出加自动刷新（flush）
        PrintWriter pw = new PrintWriter(bw,true);
        //上面四行代码如同下面一行代码
        //PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream("pw.txt"), StandardCharsets.UTF_8)));
        Scanner scan = new Scanner(System.in);
        while(true){
            String line = scan.nextLine();
            if("exit".equals(line)){
                break;
            }
            //当开启自动刷新后，每当调用println（）方法写出一行后都会自动flush（）
            //注意：print（）方法不会flush（）
            pw.println(line);
        }
        pw.close();





        /*

        PrintWriter pw = new PrintWriter("pw.txt");
        pw.println("和我在成都的街头走一走，");
        pw.println("哦哦哦哦...");
        pw.println("知道所有的灯都熄灭了也不停留");
        pw.close();
        */


       /*
        // 缓冲字符流                                        转换流              文件流/低级流                    编码格式
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("pw.txt"), StandardCharsets.UTF_8));
        bw.write("和我在成都的街头走一走，哦哦哦哦...\n");
        bw.write("知道所有的灯都熄灭了也不停留");
        System.out.println("写出完毕");
        bw.close();

        */

    }
}
